/*
static的作用: 修饰全局变量，只能被该文件访问
              修饰局部变量，被修饰的变量为静态变量，一直到程序结束才会被释放
              修饰函数，该函数只能在包含该函数定义的文件中被调用
 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define n 100
typedef struct 
{
    char num[10];//学号
    char name[20];//姓名
    float socre;//成绩
}student;

student stu[n];
int flag=0;//录入文件的数量

//读取学生数据
void read_stu()
{
    //文件指针 打开文件
    FILE *fp=fopen("student.txt","r");
    if(!fp)
    {
        printf("文件打开失败\n");
        return;
    }
    flag=0;
    while(fscanf(fp,"%s %s %f",stu[flag].num,stu[flag].name,&stu[flag].socre)!=EOF)
    {
        flag++;
        if(flag>=n)
        {
            break;
        }
    }
    fclose(fp);
}
//写入文件
void write_stu()
{
    FILE *fp =fopen("student.txt","w");
    if(!fp)
    {
        printf("文件打开失败\n");
        return;
    }
    for(int i=0;i<flag;i++)
    {
        fprintf(fp,"%s %s %.2f\n",stu[i].num,stu[i].name,stu[i].socre);
    }
    fclose(fp);
}

//录入数据
void join_message(void)
{
    if(flag>=n)
    {
        printf("录入信息失败，已达上限\n");
        return;
    }
    
    printf("请输入您的学号:");
    scanf("%s",stu[flag].num);
    printf("请输入您的姓名:");
    scanf("%s",stu[flag].name);
    printf("请输入您的成绩:");
    scanf("%f",&stu[flag].socre);
    flag++;
    write_stu();
    printf("信息录入成功\n");
}
void chaxun(void)//查询成绩
{
    char number[10];
    char name1[20];
    printf("请输入您的学号:");
    scanf("%s",number);
    printf("请输入您的姓名:");
    scanf("%s",name1);
    for (int i = 0; i < flag; i++)
    {
        if(strcmp(stu[i].num,number)==0 && strcmp(stu[i].name,name1)==0)
        {
            printf("成绩:%.2f\n",stu[i].socre);
            return;
        }
    }
    printf("打印失败，未找到该生\n");
}
int main(void)
{
    int ch;
    read_stu();
    while(1)
    {
        printf("1.录入信息\n");
        printf("2.查询信息\n");
        printf("3.退出系统\n");
        printf("请选择功能:");
        scanf("%d",&ch);
        
        switch(ch)
        {
            case 1:
                join_message();
                break;
            case 2:
                chaxun();
                break;
            case 3:
                write_stu();
                return 0;
            default:
                printf("退出系统\n");
        }
    }
    return 0;
}




// typedef struct air
// {
//     int num;//编号
//     char flag;//标记是否售出
//     char name[20];//乘客姓名
//     char sex[10];//性别
// }Seat;
// void init_seat(Seat seat[])//定义并初始化座位
// {
//     for(int i=0;i<12;i++)
//     {
//         seat[i].num=i+1;
//         seat[i].flag=0;
//         strcpy(seat[i].name,"");
//         strcpy(seat[i].sex,"");
//     }
// }
// void empty_seat(Seat seat[])//空座位
// {
//     printf("空座位编号:\n");
//     for(int i=0;i<12;i++)
//     {
//         if(seat[i].flag==0)
//         {
//             printf("%d  ",seat[i].num);
//         }
//     }
//     printf("\n");
// }
// void sold_seat(Seat seat[])//已售座位
// {
//     printf("已被售出座位的编号以及乘客的信息:\n");
//     for(int i=0;i<12;i++)
//     {
//         if(seat[i].flag == 1)
//         {
//             printf("编号:%d,姓名:%s,性别:%s\n",seat[i].num,seat[i].name,seat[i].sex);
//         }
//     }
//     printf("\n");
// }
// void buy_ticket(Seat seat[])//买票
// {
//     int seat_number;
//     printf("请输入您想要预定的座位(1-12)：");
//     scanf("%d",&seat_number);
//     if(seat_number<1||seat_number>12||seat[seat_number-1].flag)
//     {
//         printf("购票失败！\n");
//     }
//     else{
//         printf("请输入您的姓名:");
//         scanf("%s",seat[seat_number-1].name);
//         printf("请输入您的性别:");
//         scanf("%s",seat[seat_number-1].sex);
//         seat[seat_number-1].flag=1;
//         printf("购票成功!!\n");
//     }
// }
// void return_ticket(Seat seat[])//退票
// {
//     int seat_number;
//     printf("请输入您想要退的座位号(1-12)：");
//     scanf("%d",&seat_number);
//     if(seat_number<1||seat_number>12||seat[seat_number-1].flag==0)
//     {
//         printf("退票失败!\n");
//     }
//     else{
//         seat[seat_number-1].flag=0;
//         strcpy(seat[seat_number-1].name,"");
//         strcpy(seat[seat_number-1].sex,"");
//         printf("退票成功!\n");
//     }
// }
// void menu()
// {
//     printf("菜单:\n");
//     printf("1.显示所有未被分配的空座位编号\n");
//     printf("2.显示已被售出的座位编号及乘客信息\n");
//     printf("3.买票\n");
//     printf("4.退票\n");
//     printf("5.退出系统\n");
//     printf("请输入1~5\n");
// }
// int get_choice()
// {
//     int choice;
//     scanf("%d",&choice);
//     return choice;
// }
// int main(void)
// {
//     Seat seat[12];
//     init_seat(seat);
//     //Seat seat[12];
//     while(1)
//     {
//         menu();
//         int choice=get_choice();
//         switch(choice)
//         {
//             case 1:
//                 empty_seat(seat);
//                 printf("----------------------------\n");
//                 break;
//             case 2:
//                 sold_seat(seat);
//                 printf("----------------------------\n");
//                 break;
//             case 3:
//                 buy_ticket(seat);
//                 printf("----------------------------\n");
//                 break;
//             case 4:
//                 return_ticket(seat);
//                 printf("----------------------------\n");
//                 break;
//             case 5:
//                 printf("退出系统\n");
//                 printf("----------------------------\n");
//                 return 0;
//             default:
//                 printf("输出无效，请重新输入\n");
//         }
//     }
//     return 0;
// }

// void rotate_matrix(int (*oring)[4],int (*out)[4],int len)
// {
//     for(int i=0;i<len;i++)
//     {
//         for(int j=0;j<len;j++)
//         {j
//             out[j][len-i-1]=oring[i][j];//旋转后的i等于旋转前的j，旋转后的j等于len-旋转前的i再减1
//         }
//     }
// }
// int main(void)
// {
//     int oring[4][4]={
//         {1,2,3,4},
//         {2,3,4,5},
//         {3,4,5,6},
//         {4,5,6,7}
//     };
//     int out[4][4];
//     int len=4;
//     rotate_matrix(oring,out,len);
//     for(int i=0;i<len;i++)
//     {
//         for(int j=0;j<len;j++)
//         {
//             printf("%d\t",out[i][j]);
//         }
//         printf("\n");
//     }
// }

// int main(void)
// {
//     int num[4][5];
//     int *p_num[4];//定义指针数组
//     int i;
//     for(i=0;i<4;i++)
//     {
//         p_num[i]=num[i];//通过*p_num访问num
//     }
//     int value=1;
//     for(i=0;i<4;i++)
//     {
//         for(int j=0;j<5;j++)
//         {
//             p_num[i][j]=value++;//赋值
//         }
//     }
//     int (*p)[5]=num;//定义数组指针
//     for(i=0;i<4;i++)
//     {
//         for(int j=0;j<5;j++)
//         {
//             printf("%d\t",*(*(p+i)+j));//输出元素
//         }
//         printf("\n");
//     }
// }

// int main(void)
// {
//     int num[10]={1,2,3,4,5,6,7,8,9,10};
//     int i;
//     int *p=num;
//     int *q=num + sizeof(num)/sizeof(num[0]) -1;
//     for(i=0;i<10;i++)
//     {
//         printf("%d\t",num[i]);
//     }
//     printf("\n");
//     while(p<q)
//     {
//         int temp=*p;
//         *(p++)=*q;
//         *(q--)=temp;
//     }
//     for(i=0;i<10;i++)
//     {
//         printf("%d\t",num[i]);
//     }
//     printf("\n");
//     return 0;
// }

// void mystrcat(char *p,char *q)
// {
//     while((*p) != '\0')
//     p++;
//     while((*q) != '\0')
//     {
//         *p = *q;
//         p++;
//         q++;
//     }
//     *p ='\0';
// }
// int mystrcmp(char *p,char *q)
// {
//     while(*p != '\0'  && *p != '\0')
//     {
//         if(*p != *q)
//         {
//             return *p-*q;
//         }
//         p++;
//         q++;
//     }
//     return *q-*p;
// }
// void mystrcpy(char *p,char *q)
// {
//     while((*q) != '\0')
//     {
//         *p=*q;
//         p++;
//         q++;
//     }
//     *p='\0';
// }
// int main(void)
// {
//     char num1[20]={"abcdefg"};
//     char num2[20]={"hijklmn"};
//     mystrcat(num1,num2);
//     puts(num1);
//     printf("%d\n",strcmp(num1,num2));
//     printf("%d\n",mystrcmp(num1,num2));
//     mystrcpy(num1,num2);
//     printf("%s\n",num1);
// }